package com.jyszkj.map.util

import com.jyszkj.map.bean.DeviceBean
import kotlin.math.*

object DistanceCalculator {
    // 地球半径（公里）
    private const val EARTH_RADIUS = 6371.0

    /**
     * 使用哈弗辛公式计算两点间距离（公里）
     * @param lat1 点1纬度
     * @param lon1 点1经度
     * @param lat2 点2纬度
     * @param lon2 点2经度
     * @return 两点间距离（公里）
     */
    fun calculateDistance(lat1: Double, lon1: Double, lat2: Double, lon2: Double): Double {
        // 将经纬度从度转换为弧度
        val latDistance = Math.toRadians(lat2 - lat1)
        val lonDistance = Math.toRadians(lon2 - lon1)

        val a = sin(latDistance / 2).pow(2) +
                cos(Math.toRadians(lat1)) * cos(Math.toRadians(lat2)) *
                sin(lonDistance / 2).pow(2)

        val c = 2 * atan2(sqrt(a), sqrt(1 - a))

        return EARTH_RADIUS * c
    }

    /**
     * 找出离中心点最远的设备距离
     * @param devices 设备列表
     * @param centerLat 中心点纬度
     * @param centerLon 中心点经度
     * @return 最远距离（公里）
     */
    fun findFarthestDistance(devices: List<DeviceBean>, centerLat: Double, centerLon: Double): Double {
        if (devices.isEmpty()) return 0.0

        return devices.maxOfOrNull { device ->
            calculateDistance(
                centerLat, centerLon,
                device.lat, device.lon
            )
        } ?: 0.0
    }
}
